#! /bin/bash

#  This script is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License version 2 as
#  published by the Free Software Foundation.
#
#  See the COPYING and AUTHORS files for more details.

# Read in library functions
if [ "$(type -t patch_file_name)" != function ]
then
	if ! [ -r $CMDPATH/scripts/patchfns ]
	then
		echo "Cannot read library $CMDPATH/scripts/patchfns" >&2
		exit 1
	fi
	. $CMDPATH/scripts/patchfns
fi

usage()
{
	printf $"Usage: quilt remove [-p patch] {file} ...\n"
	if [ x$1 = x-h ]
	then
		printf $"
Remove one or more files from the topmost or named patch.  Files that
are modified by patches on top of the specified patch cannot be removed.

-p patch
	Patch to remove files from.
"
		exit 0
	else
		exit 1
	fi
}

options=`getopt -o p:h -- "$@"`

if [ $? -ne 0 ]
then
	usage
fi

eval set -- "$options"

while true
do
	case "$1" in
	-p)
		if ! patch=$(find_patch $2)
		then
			printf $"Patch %s is not in series\n" "$2" >&2
			exit 1
		fi
		shift 2 ;;
	-h)
		usage -h ;;
	--)
		shift
		break ;;
	esac
done

if [ $# -lt 1 ]
then
	usage
fi

if [ -n "$patch" ]
then
	if ! is_applied $patch
	then
		printf $"Patch %s is not applied\n" "$(print_patch $patch)" >&2
		exit 1
	fi
else
	patch=$(top_patch)
	if [ -z "$patch" ]
	then
		printf $"No patches applied\n" >&2
		exit 1
	fi
fi

status=0
for file in $*
do	
	if ! file_in_patch $SUBDIR$file $patch
	then
		printf $"File %s is not in patch %s\n" \
		       "$SUBDIR$file" "$(print_patch $patch)" >&2
		status=1
		continue
	fi

	next_patch=$(next_patch_for_file $patch $SUBDIR$file)
	if [ -n "$next_patch" ]
	then
		printf $"File %s modified by patch %s\n" \
		       "$SUBDIR$file" "$(print_patch $next_patch)"
		status=1
		continue
	fi

	# Restore file from backup
	if ! /usr/lib64/quilt/backup-files -r -t -s -B $QUILT_PC/$patch/ $SUBDIR$file
	then
		printf $"Failed to remove file %s from patch %s\n" \
		       "$SUBDIR$file" "$(print_patch $patch)" >&2
		status=1
		continue
	fi

	if [ -e $(dirname $QUILT_PC/$patch~refresh) -a \
	     -e $(patch_file_name $patch) ]
	then
		# The patch must be refreshed in order to get rid of the
		# patch permanently.
		touch $QUILT_PC/$patch~refresh
	fi
	
	printf $"File %s removed from patch %s\n" \
	       "$SUBDIR$file" "$(print_patch $patch)"
done
exit $status
### Local Variables:
### mode: shell-script
### End:
# vim:filetype=sh
